package com.football.gkjo.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class GKJoServer {


	
	// 서버에 접속한 클라이언트 목록
	 static ArrayList<GKJoServerThread> CLIENTS = new ArrayList<GKJoServerThread>();
	// ArrayList<GKJoServerThread>();

	// 생성된 채널의 목록들
	static ArrayList<GKJoChannel> channelList = new ArrayList<GKJoChannel>();

	// 개설된 채팅방 목록

	// 전체 채팅방 목록

	// 채널 목록에 대한 정보 조회(양식)
	public static String getChannelList() {
		String list = String.format("%-10s %-15s %4s /%4s", "No", "Name",
				"Now", "MAX") + "\n";
		synchronized (GKJoServer.channelList) {
			for (int i = 0; i < GKJoServer.channelList.size(); i++) {
				GKJoChannel channel = GKJoServer.channelList.get(i);
				list += channel.getChanelInfo() + "\n";
			}
		}
		return list;
	}

	// 채널안에 있는 매치 목록 정보 조회
	public static String getMatchList(GKJoChannel selectChannel) {
		String msg = "";
		System.out.println(selectChannel.getMatchNum());
		if (selectChannel.getMatchNum() == 0) {
			msg = "현재 개설된 매치가 없습니다. 매치를 생성해주세요. \n";
		} else {
			msg = "[매치 목록]\n";
			msg += String.format("%5s %-25s %-20s %-10s", "No", "Title",
					"UserID", "Person", 2) + "\n";
			for (int i = 0; i < selectChannel.getMatchList().size(); i++) {
				GKJoMatch match = selectChannel.getMatchList().get(i);
				msg += match.getMatchInfo();
			}
		}
		return msg;
	}
	

	public static void main(String[] args) throws IOException {

		// 서버 소켓을 생성
		ServerSocket server = new ServerSocket(10001);

		System.out.println("연결 되었습니다.");
		System.out.println("클라이언트 접속 대기중..");
		// 연결이 수락되면 -> Socket 객체 생성
		GKJoChannel korea = new GKJoChannel("Korea");
		GKJoServer.channelList.add(korea);
		GKJoChannel brazil = new GKJoChannel("Brazil");
		GKJoServer.channelList.add(brazil);
		GKJoChannel netherlands = new GKJoChannel("Netherland");
		GKJoServer.channelList.add(netherlands);
		GKJoChannel france = new GKJoChannel("France");
		GKJoServer.channelList.add(france);

		while (true) {
			Socket socket = server.accept();
			System.out.println(socket.getInetAddress().getHostAddress()
					+ "에서 접속했습니다.");

			// 소켓에 연결된 클라이언트로 입력을 담당해줄 쓰레드를 생성해준다.
			GKJoServerThread gsThread = new GKJoServerThread(socket);

			// 쓰레드를 실행한다.
			gsThread.start();
			 
			synchronized (GKJoServer.CLIENTS) {
			 // 접속한 클라이언트 쓰레드를 목록에 추가.
				GKJoServer.CLIENTS.add(gsThread);
			}
		}
	}

}
